package com.example.demo.controller;

import com.example.demo.model.Student;
import com.example.demo.model.TestModel;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;

@RequestMapping("/test")
@RestController
public class TestController {

    /**
     * 读取配置中的内容*/
//    @Value("${demo.name}")
//    private String name;
//    @Value("${demo.age}")
//    private Integer age;

    /**
     * yml配置不同的数据类型
     * 得出结论：
     *  1，属性名不需要与配置名一致
     *  2，@Value注解的key必须一致 */
    @Value("${type.stringValue}")
    private String stringValue;

    @Value("${type.intValue}")
    private Integer intValue;

    @Value("${type.floatValue}")
    private Float floatValue;

    @Value("${type.bool1Value}")
    private Boolean bool1Value;

    @Value("${type.bool2Value}")
    private Boolean bool2Value;

    @Value("${type.nullValue}")
    private String n;

    @Value("${type.emptyValue}")
    private String emptyValue;

    @Value("${demo1.s1}")
    private String s1;

    @Value("${demo1.s2}")
    private String s2;

    @Value("${demo1.s3}")
    private String s3;

    @Autowired
    private Student student;

    @Autowired
    private TestModel testModel;

    @PostConstruct
    public void m6() {
        System.out.println(this.testModel.toString());
    }

    /**
     * 配置对象 并 取出对象的注意事项：
     *  1.在yml配置文件中按照一级： 二级的方式进行配置
     *  2.使用 @ConfigurationProperties（prefix = 对象名）的方式获取对象配置对象
     *  3。对象中的字段名必须与属性名相同才能成功获取值*/
    @PostConstruct
    public void m5() {
        System.out.println(this.student.toString());
        System.out.println("--------- 分割线 -----------");

    }

    @PostConstruct
    public void m4() {
        System.out.println("无引号：" + this.s1);
        System.out.println("单引号：" + this.s2);
        System.out.println("双引号：" + this.s3);
        System.out.println("--------- 分割线 -----------");
    }

    @RequestMapping("/m3")
    public String m3() {
        return this.toString();
    }

//    @RequestMapping("/m2")
//    public String m2() {
//        return "Hello, My name is " + this.name + ", I am " + this.age + " years old.";
//    }

    @RequestMapping("/m1")
    public String m1() {
        return "成功访问并调用方法！";
    }

    @Override
    public String toString() {
        return "TestController{" +
                "stringValue='" + stringValue + '\'' +
                ", intValue=" + intValue +
                ", floatValue=" + floatValue +
                ", bool1Value=" + bool1Value +
                ", bool2Value=" + bool2Value +
                ", n='" + n + '\'' +
                ", emptyValue='" + emptyValue + '\'' +
                '}';
    }
}
